package com.sl.au.repository;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;

import org.springframework.data.jpa.repository.Query;

import com.sl.au.entity.M2R;
import com.sl.au.entity.Module;
import com.sl.au.entity.Role;

import java.util.List;

public interface M2RRepository extends JpaRepository<M2R, String> {
	//通过角色得到所有的m2r
	public Page<M2R> findByRole(Role role, Pageable pageable);

	// 通过模块和角色得到M2R实体
	public M2R findByModuleAndRole(Module module, Role role);

	// 得到未配置模块数据
	@Query("select m from Module m where m not in(select m2.module from M2R m2 where m2.role=?1)")
	Page<Module> findModuleNot(Role role, Pageable pageable);

	@Query("select count(*) from Module m where m not in(select m2r.module from M2R m2r where m2r.role=?1)")
	int findModuleNum(Role role);

	// 得到配置了的模块数据条数
	@Query("select count(*) as num from M2R where role=?1")
	int getListNum(Role role);
	
	/**返回用户授权中单个模块中的权限，包括页面元素按钮级控制
	 * @param roleId
	 * @param moduleId
	 * @return
	 */
	M2R findByRoleIdAndModuleId(String roleId,String moduleId);
	
	List<M2R> findByRole(Role role);
	
	////获得role的所有菜单模块
	@Query("select m2.module from M2R m2 where m2.role=?1 order by m2.module.menuIndex asc")
	List<Module> findModuleByRole(Role role);

	////获得module的所有分配的菜单权限数据
	@Query("select m2 from M2R m2 where m2.module.id=?1")
	List<M2R> findByModuleId(String id);

}
